package com.github.droidfu.activities; import java.util.List; import android.app.AlertDialog; import android.app.Application; import android.app.Dialog; import android.content.Intent; import android.content.DialogInterface.OnClickListener; import android.os.Bundle; import android.view.GestureDetector; import android.view.KeyEvent; import android.view.MotionEvent; import android.view.View; import android.view.View.OnTouchListener; import android.widget.ZoomControls; import com.github.droidfu.DroidFuApplication; import com.github.droidfu.dialogs.DialogClickListener; import com.github.droidfu.listeners.MapGestureListener; import com.google.android.maps.MapActivity; import com.google.android.maps.MapView; import com.google.android.maps.MyLocationOverlay; public class BetterMapActivity extends MapActivity implements BetterActivity { private boolean wasCreated, wasInterrupted; private int progressDialogTitleId; private int progressDialogMsgId; private Intent currentIntent; private MyLocationOverlay myLocationOverlay; private GestureDetector tapDetector; private OnTouchListener tapListener; private MapView mapView; @Override protected void onCreate(Bundle icicle) { super.onCreate(icicle); this.wasCreated = true; this.currentIntent = getIntent(); Application application = getApplication(); if (application instanceof DroidFuApplication) { ((DroidFuApplication) application).setActiveContext(getClass().getCanonicalName(), this); } } @Override protected void onPause() { super.onPause(); wasCreated = wasInterrupted = false; if (myLocationOverlay != null) { myLocationOverlay.disableMyLocation(); } } @Override protected void onResume() { super.onResume(); if (myLocationOverlay != null) { myLocationOverlay.enableMyLocation(); } } @Override protected void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); wasInterrupted = true; } @Override public void onNewIntent(Intent intent) { super.onNewIntent(intent); this.currentIntent = intent; } @Override protected boolean isRouteDisplayed() { return false; } public Intent getCurrentIntent() { return currentIntent; } public int getWindowFeatures() { return BetterActivityHelper.getWindowFeatures(this); } public boolean isApplicationBroughtToBackground() { return BetterActivityHelper.isApplicationBroughtToBackground(this); } public boolean isLandscapeMode() { return getWindowManager().getDefaultDisplay().getOrientation() == 1; } public boolean isLaunching() { return !wasInterrupted && wasCreated; } public boolean isPortraitMode() { return !isLandscapeMode(); } public boolean isRestoring() { return wasInterrupted; } public boolean isResuming() { return !wasCreated; } public AlertDialog newYesNoDialog(int titleResourceId, int messageResourceId, OnClickListener listener) { return BetterActivityHelper.newYesNoDialog(this, getString(titleResourceId), getString(messageResourceId), android.R.drawable.ic_dialog_info, listener); } public AlertDialog newInfoDialog(int titleResourceId, int messageResourceId) { return BetterActivityHelper.newMessageDialog(this, getString(titleResourceId), getString(messageResourceId), android.R.drawable.ic_dialog_info); } public AlertDialog newAlertDialog(int titleResourceId, int messageResourceId) { return BetterActivityHelper.newMessageDialog(this, getString(titleResourceId), getString(messageResourceId), android.R.drawable.ic_dialog_alert); } public AlertDialog newErrorHandlerDialog(int titleResourceId, Exception error) { return BetterActivityHelper.newErrorHandlerDialog(this, getString(titleResourceId), error); } public AlertDialog newErrorHandlerDialog(Exception error) { return newErrorHandlerDialog(getResources().getIdentifier( BetterActivityHelper.ERROR_DIALOG_TITLE_RESOURCE, "string", getPackageName()), error); } public <T> Dialog newListDialog(String title, List<T> elements, DialogClickListener<T> listener, boolean closeOnSelect) { return BetterActivityHelper.newListDialog(this, title, elements, listener, closeOnSelect); } @Override protected Dialog onCreateDialog(int id) { return BetterActivityHelper.createProgressDialog(this, progressDialogTitleId, progressDialogMsgId); } public void setProgressDialogTitleId(int progressDialogTitleId) { this.progressDialogTitleId = progressDialogTitleId; } public void setProgressDialogMsgId(int progressDialogMsgId) { this.progressDialogMsgId = progressDialogMsgId; } public void setMapView(int mapLayoutId) { this.mapView = (MapView) findViewById(mapLayoutId); } public void setMapViewWithZoom(int mapLayoutId, int zoomControlsLayoutId) { this.mapView = (MapView) findViewById(mapLayoutId); ZoomControls zoomControls = (ZoomControls) findViewById(zoomControlsLayoutId); zoomControls.setOnZoomInClickListener(new View.OnClickListener() { public void onClick(View v) { getMapView().getController().zoomInFixing(getMapView().getWidth() / 2, getMapView().getHeight() / 2); } }); zoomControls.setOnZoomOutClickListener(new View.OnClickListener() { public void onClick(View v) { getMapView().getController().zoomOut(); } }); } public MapView getMapView() { return mapView; } public void setMyLocationOverlay(MyLocationOverlay myLocationOverlay) { // Create the overlay and add it to the map. this.myLocationOverlay = myLocationOverlay; mapView.getOverlays().add(this.myLocationOverlay); } public MyLocationOverlay getMyLocationOverlay() { return myLocationOverlay; } protected void setMapGestureListener(MapGestureListener mapGestureListener) { // Map gesture listener. Our default implementation handles a double tap action // as a zoom in. tapDetector = new GestureDetector(mapGestureListener); tapListener = new View.OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { if (tapDetector.onTouchEvent(event)) { return true; } return false; } }; mapView.setOnTouchListener(tapListener); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { BetterActivityHelper.handleApplicationClosing(this, keyCode); return super.onKeyDown(keyCode, event); } }